package org.coopac.controller.admision;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;

import org.coopac.model.CoopacDatosLaborales;
import org.coopac.model.CoopacDireccionPersona;
import org.coopac.model.CoopacDocumentoPersona;
import org.coopac.model.CoopacPersona;
import org.coopac.model.CoopacTelefonoPersona;
import org.coopac.service.IDatosLaboralesService;
import org.coopac.service.IDireccionPersonaService;
import org.coopac.service.IDocumentoPersonaService;
import org.coopac.service.ITelefonoPersonaService;
import org.coopac.service.ITipoMaestroService;

public class PersonaCompleta {
	
	@ManagedProperty(value = "#{tipoMaestroService}")
	ITipoMaestroService 		tipoMaestroService;
	
	@ManagedProperty(value = "#{documentoPersonaService}")
	IDocumentoPersonaService 	documentoService;
	
	@ManagedProperty(value = "#{telefonoPersonaService}")
	ITelefonoPersonaService 	telefonoService;
	
	@ManagedProperty(value = "#{direccionPersonaService}")
	IDireccionPersonaService 	direccionService;
	
	@ManagedProperty(value = "#{datoslaboralesService}" )
	IDatosLaboralesService 		datosLaboralesService;

	private CoopacPersona persona;
	private List<CoopacTelefonoPersona> telefonoXPersona;
	private List<CoopacDireccionPersona> direccionXPersona;
	private List<CoopacDocumentoPersona> documentoXPersona;
	private List<CoopacDatosLaborales> datosLaboralesXPersona;
	
	private PersonaCompleta conyugueXPersona;
	
	private List<PersonaCompleta> familiaresXPersona;

	public PersonaCompleta() {
		persona = new CoopacPersona();
		telefonoXPersona = new ArrayList<CoopacTelefonoPersona>();
		direccionXPersona = new ArrayList<CoopacDireccionPersona>();
		datosLaboralesXPersona = new ArrayList<CoopacDatosLaborales>();
		documentoXPersona = new ArrayList<CoopacDocumentoPersona>();
		familiaresXPersona = new ArrayList<PersonaCompleta>();
	}

	public PersonaCompleta(CoopacPersona persona,
			List<CoopacTelefonoPersona> telefonoXPersona,
			List<CoopacDireccionPersona> direccionXPersona,
			List<CoopacDocumentoPersona> documentoXPersona,
			List<CoopacDatosLaborales> datosLaboralesXPersona,
			PersonaCompleta conyugueXPersona,
			List<PersonaCompleta> familiaresXPersona) {
		super();
		this.persona = persona;
		this.telefonoXPersona = telefonoXPersona;
		this.direccionXPersona = direccionXPersona;
		this.documentoXPersona = documentoXPersona;
		this.datosLaboralesXPersona = datosLaboralesXPersona;
		this.conyugueXPersona = conyugueXPersona;
		this.familiaresXPersona = familiaresXPersona;
	}
	
	public void listarTelefonoXPersona(){
		for(CoopacTelefonoPersona coopacTelefonoPersona:telefonoService.listar()){
			if(coopacTelefonoPersona.getCoopacPersona().getIdPersona().equals(persona.getIdPersona())){
				telefonoXPersona.add(coopacTelefonoPersona);
			}
		}
	}
	
	public void listarDireccionXPersona(){
		for(CoopacDireccionPersona coopacDireccionPersona:direccionService.listar()){
			if(coopacDireccionPersona.getCoopacPersona().getIdPersona().equals(persona.getIdPersona())){
				direccionXPersona.add(coopacDireccionPersona);
			}
		}
	}
	
	public void listarDocumentoXPersona(){
		for(CoopacDocumentoPersona coopacDocumentoPersona:documentoService.listar()){
			if(coopacDocumentoPersona.getCoopacPersona().getIdPersona().equals(persona.getIdPersona())){
				documentoXPersona.add(coopacDocumentoPersona);
			}
		}
	}
	
	public void listardatosLaboralesXPersona(){
		for(CoopacDatosLaborales coopacDatosLaborales:datosLaboralesService.listar()){
			if(coopacDatosLaborales.getCoopacPersona().getIdPersona().equals(persona.getIdPersona())){
				datosLaboralesXPersona.add(coopacDatosLaborales);
			}
		}
	}
	
	
	public String generarDomicilioCompletoPersona(CoopacDireccionPersona direccionPersona){
		String domicilioCompletoPersona = "";
//		if(direccionPersona.getCoopacTipoMaestroByIdTipoMaestroZona().getIdTipoMaestro()!=null){
//			domicilioCompletoPersona = domicilioCompletoPersona + 
//				tipoMaestroService.getById(direccionPersona.getCoopacTipoMaestroByIdTipoMaestroZona().getIdTipoMaestro()).getNombre() + " " + direccionPersona.getNombreZona()+ " ";
//		}
//		if(direccionPersona.getCoopacTipoMaestroByIdTipoMaestroVia().getIdTipoMaestro()!= null){
//			domicilioCompletoPersona = domicilioCompletoPersona + 
//				tipoMaestroService.getById(direccionPersona.getCoopacTipoMaestroByIdTipoMaestroVia().getIdTipoMaestro()).getNombre() + " " + direccionPersona.getNombreVia()+ " ";
//		}
		if(direccionPersona.getNumero().isEmpty() == false){
			domicilioCompletoPersona = domicilioCompletoPersona + "Num. " + direccionPersona.getNumero() + " ";
		}
		if(direccionPersona.getDepartamento().isEmpty() == false){
			domicilioCompletoPersona = domicilioCompletoPersona + "Dpto. " + direccionPersona.getDepartamento()+" ";
		}
		if(direccionPersona.getInterior().isEmpty() == false){
			domicilioCompletoPersona = domicilioCompletoPersona + "Int. " + direccionPersona.getInterior()+" ";
		}
		if(direccionPersona.getManzana().isEmpty() == false){
			domicilioCompletoPersona = domicilioCompletoPersona + "Man. " + direccionPersona.getManzana()+" ";
		}
		if(direccionPersona.getLote().isEmpty() == false){
			domicilioCompletoPersona = domicilioCompletoPersona + "Lot. " + direccionPersona.getLote()+" ";
		}
		if(direccionPersona.getInterior().isEmpty() == false){
			domicilioCompletoPersona = domicilioCompletoPersona + "Int. " + direccionPersona.getInterior()+" ";
		}
		if(direccionPersona.getReferencia().isEmpty() == false){
			domicilioCompletoPersona = domicilioCompletoPersona + "Ref. " + direccionPersona.getReferencia();
		}
		
		return domicilioCompletoPersona;
	}
	
	//getters and setters

	public CoopacPersona getPersona() {
		return persona;
	}

	public void setPersona(CoopacPersona persona) {
		this.persona = persona;
	}

	public List<CoopacTelefonoPersona> getTelefonoXPersona() {
		return telefonoXPersona;
	}

	public void setTelefonoXPersona(List<CoopacTelefonoPersona> telefonoXPersona) {
		this.telefonoXPersona = telefonoXPersona;
	}

	public List<CoopacDireccionPersona> getDireccionXPersona() {
		return direccionXPersona;
	}

	public void setDireccionXPersona(List<CoopacDireccionPersona> direccionXPersona) {
		this.direccionXPersona = direccionXPersona;
	}

	public List<CoopacDocumentoPersona> getDocumentoXPersona() {
		return documentoXPersona;
	}

	public void setDocumentoXPersona(List<CoopacDocumentoPersona> documentoXPersona) {
		this.documentoXPersona = documentoXPersona;
	}

	public List<CoopacDatosLaborales> getDatosLaboralesXPersona() {
		return datosLaboralesXPersona;
	}

	public void setDatosLaboralesXPersona(
			List<CoopacDatosLaborales> datosLaboralesXPersona) {
		this.datosLaboralesXPersona = datosLaboralesXPersona;
	}

	public PersonaCompleta getConyugueXPersona() {
		return conyugueXPersona;
	}

	public void setConyugueXPersona(PersonaCompleta conyugueXPersona) {
		this.conyugueXPersona = conyugueXPersona;
	}

	public List<PersonaCompleta> getFamiliaresXPersona() {
		return familiaresXPersona;
	}

	public void setFamiliaresXPersona(List<PersonaCompleta> familiaresXPersona) {
		this.familiaresXPersona = familiaresXPersona;
	}

	public ITipoMaestroService getTipoMaestroService() {
		return tipoMaestroService;
	}

	public void setTipoMaestroService(ITipoMaestroService tipoMaestroService) {
		this.tipoMaestroService = tipoMaestroService;
	}

	public IDocumentoPersonaService getDocumentoService() {
		return documentoService;
	}

	public void setDocumentoService(IDocumentoPersonaService documentoService) {
		this.documentoService = documentoService;
	}

	public ITelefonoPersonaService getTelefonoService() {
		return telefonoService;
	}

	public void setTelefonoService(ITelefonoPersonaService telefonoService) {
		this.telefonoService = telefonoService;
	}

	public IDireccionPersonaService getDireccionService() {
		return direccionService;
	}

	public void setDireccionService(IDireccionPersonaService direccionService) {
		this.direccionService = direccionService;
	}

	public IDatosLaboralesService getDatosLaboralesService() {
		return datosLaboralesService;
	}

	public void setDatosLaboralesService(
			IDatosLaboralesService datosLaboralesService) {
		this.datosLaboralesService = datosLaboralesService;
	}
	
	
	
}
